package web.panier;
import java.util.ArrayList;
import java.util.List;

import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.validation.validator.RangeValidator;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import persistence.produitcatalogue.ProduitCatalogue;
import persistence.util.HibernateUtil;

import web.HomePage;
import web.Template;
import web.commande.Commande;
import web.commande.ConsulterCommande;
import web.commande.ProduitCommande;
/**
 * 
 * @author Guillaume
 *
 */
public class ConsulterPanier extends Template {

	private ListView listeProduits;
	private Form<?> formAccept;
	private Form<?> formQte;
	private Form<?> formDelete;
	private List<ProduitCommande> pc;
	List<ProduitCatalogue> listAux;

	@SuppressWarnings({ "unchecked", "serial" })
	public ConsulterPanier()
	{
		super();
		pc = new ArrayList<ProduitCommande>();
		listAux = getMySession().getPanier().getListeProduits();


		listeProduits = new ListView("listeproduits", listAux)
		{	
			// On définit une nouvelle commande pour un produit
			// a chaque ligne affichée
			private ProduitCommande produitACommande;

			ProduitCatalogue currentProduct;

			@SuppressWarnings("rawtypes")
			public void populateItem(ListItem item)
			{
				final ProduitCatalogue currentProduct = (ProduitCatalogue) item.getModelObject();
				produitACommande = new ProduitCommande();

				produitACommande.setPc(currentProduct);
				produitACommande.setQuantite(1);
				item.add(new Label("libelle", "Produit : "+currentProduct.getLibelle()));
				// Définition du formulaire permettant de préciser, pour chaque ligne, la qte du produit que l'on veut commander
				item.add(new Label("marque", "Marque :"+currentProduct.getMarque()));
				item.add(new Label("stockProduit", "Stock actuel :"+currentProduct.getStockProduit()));
				// On ajoute le produit et la quantité dans la liste de produits commandés, cette liste servira pour l'historique des commandes
				pc.add(produitACommande);
				// On ajoute la possibilité de supprimer un produit du panier
				formDelete = new Form<ProduitCatalogue>("formdelete")
						{	
					public void onSubmit()
					{
						currentProduct.getAccessoire();
						listAux.remove(currentProduct);
						getMySession().getPanier().setListeProduits(listAux);
						setResponsePage(new ConsulterPanier());
					}
						};
						// On ajoute le formulaire de suppression du produit du panier
						item.add(formDelete);
						// On diminue le stock du produit par la quantité 

			};
		};
		add(listeProduits);
		formAccept = new Form<Object>("formaccept")
				{
			public void onSubmit()
			{
				SessionFactory sf = HibernateUtil.getSessionFactory();
				Session session = sf.openSession();
				Transaction t;
				for (ProduitCommande produitComm : pc)
				{
					ProduitCatalogue pUpdate = produitComm.getPc();
					int qte = 1;
					int stock = produitComm.getPc().getStockProduit();
					int newStock = stock-qte;
					pUpdate.setStockProduit(newStock);
					if(pUpdate.getStockProduit() == 0)
					{
						t = session.beginTransaction();
						pUpdate.setVisibilite(0);
						session.update(pUpdate);
						t.commit();
					}
					else {
						t = session.beginTransaction();

						session.update(pUpdate);
						t.commit();
					}
					setResponsePage(new HomePage("Produit acheté avec succès"));
				}

				setResponsePage(new ConsulterCommande(pc));
			}
				};
				add(formAccept);
	}
}
